<?php
Class Zip_model
{

	var $sPath;
	var $sURL;

	function Zip_model()
	{
		$sFolderName = $_SESSION['AAdminId']; // 文件夹名
		$this->sPath = ROOT.'/attachments/report/pdf/'.$sFolderName.'/'; // 文件夹路径
		$this->sURL = URL.'attachments/report/pdf/'.$sFolderName.'/'; // 文件夹地址
	}

	/**
	 * $aFlie 为需要压缩的文件数组
	 */
	function ZipMake($aFlie)
	{
		if (is_array($aFlie) && count($aFlie) > 0){
			$sPath = $this->sPath; // 文件夹路径

			$sZipFileName = $this->getZipFlieName($sPath);// 压缩文件文件名

			$sPathZip = $sPath.$sZipFileName; // PZIP文件路径

			$this->creatFile($sPath, $sZipFileName);

			// 压缩
			$zip = new ZipArchive;
			if ($zip->open($sPathZip, ZipArchive::OVERWRITE) === TRUE){
				foreach ($aFlie as $sName => $sNameTemp){
					$zip->addFile($sPath.$sNameTemp, iconv("UTF-8", "GBK", $sName));
				}
				$zip->close();
			}

			// 删除原有文件  删除不能发在ZIP类中
			foreach ($aFlie as $sName => $sNameTemp){
				@unlink($sPath.$sNameTemp);
			}

			return array(
				'num' => count($aFlie),
				'downPath' => $this->sURL.$sZipFileName,
			);
		}
		else{
			return array('num' => 0,);
		}
	}

	/**
	 * 为用户生成独立创建文件夹, 并创建zip初始文件
	 */
	function creatFile($sPath, $sZipFileName)
	{
		@mkdir($sPath);
		$handle = @fopen($sPath.$sZipFileName, 'wb');
		@fclose($handle);
	}

	/**
	 * 轮换 压缩原始文件的文件名
	 */
	function getZipFlieName($sPath)
	{
		$name1 = 'zip1.zip';
		$name2 = 'zip2.zip';

		if (file_exists($sPath.$name1)){
			@unlink($sPath.$name1);
			return $name2;
		}else if (file_exists($sPath.$name2)){
			@unlink($sPath.$name2);
			return $name1;
		}else{
			return $name1;
		}
	}
}
